#!/usr/bin/env python
# -*- coding: UTF-8 -*-

'''
    Layer:
        负责初始化一层，并且作为 Node 的集合对象，提供对 Node 集合的操作
'''

from Node import *
from ConstNode import *


class Layer(object):
    def __init__(self, layer_index, node_count):
        '''
        初始化一个层
        :param layer_index: 层的索引
        :param node_count: 该层节点的个数
        '''
        self.layer_index = layer_index
        self.nodes = []
        for i in range(node_count):
            self.nodes.append(Node(layer_index,i))
        # 添加偏置节点
        self.nodes.append(ConstNode(layer_index, node_count))


    def set_output(self, data):
        '''
        设置层的输出。当层是输入层时会用到。
        '''
        for i in range(len(data)):
            self.nodes[i].set_output(data[i])


    def calc_output(self):
        '''
        结算层的输出向量
        '''
        for node in self.nodes[:-1]:
            node.calc_output()


    def dump(self):
        '''
        打印层的信息
        '''
        for node in self.nodes:
            print node

